import axios from "axios"
import nProgress from "nprogress"
import "nprogress/nprogress.css"

//用来请求mock数据的request
//配置axios实例
const request = axios.create({
    //配置公共路径
    baseURL:process.env.VUE_APP_MOCKAPI,
    timeout: 10000,
})

//配置请求拦截器


request.interceptors.request.use((config)=>{
    //开启进度条
    nProgress.start()
    //config：是axios请求的配置对象
     //拦截器中逻辑完成后，必须把config配置对象再返回出去，否则请求无法继续进行
    return config

},(error)=>{//请求拦截器的第二个回调函数很难进入
     //进入处理失败的回调函数有两种方法：1.请求拦截器可以设置多个，当上一次失败的就会进入当此的失败函数  2.给拦截器传入额外的参数，主动进入
     //关闭进度条
    nProgress.done()
    return Promise.reject(error)
    //如果拦截器错误的请求下,我们要返回一个失败的promise实例
    //为什么要返回失败的promise实例????? 因为拦截器最终的返回结果是通过then方式返回的,then或catch只有在返回失败的promise实例的时候,then或catch才是失败状态,axios才能知道我们失败了

})

//配置响应拦截器
request.interceptors.response.use((response)=>{
     //关闭进度条
     nProgress.done()
    //response是请求回来axios组装的数据,其中data属性是服务端响应的数据
    // console.log(response);
    //我们一定要在响应拦截器中返回一个数据,否则axios方法无法得到数据
    if(response.data.code===200){
        return response.data.data
    }else{
        //如果状态码不是200，需要自己封装错误对象，失败的promise，值为该状态码对应的message描述
        return Promise.reject({message:response.data.message})
    }
    
},(error)=>{//响应拦截器的第二个回调函数很容易进入
     //关闭进度条
     nProgress.done()
    //当响应失败,则处理失败情况,要返回一个失败的priomise实例
    return Promise.reject(error)
})





export default request